#include "Lib.h"

// 颜色到LED状态的映射表
static const struct {
    uint8_t red;
    uint8_t green;
    uint8_t blue;
} colorMap[] = {
    [LED_COLOR_RED]    = {0, 1, 1}, // 红亮
    [LED_COLOR_GREEN]  = {1, 0, 1}, // 绿亮
    [LED_COLOR_BLUE]   = {1, 1, 0}, // 蓝亮
    [LED_COLOR_PURPLE] = {0, 1, 0}, // 红+蓝亮
    [LED_COLOR_YELLOW] = {0, 0, 1}, // 红+绿亮
    [LED_COLOR_CYAN]   = {1, 0, 0}, // 绿+蓝亮
    [LED_COLOR_WHITE]  = {0, 0, 0}, // 全亮
    [LED_COLOR_NONE]   = {1, 1, 1}  // 全灭
};

void RGB_LED(uint8_t color) 
{
    // 参数有效性检查
    if (color < LED_COLOR_RED || color > LED_COLOR_NONE) {
        return; // 或添加错误处理
    }

    // 查表设置LED状态
    LED_RED_SET(colorMap[color].red);
    LED_GREEN_SET(colorMap[color].green);
    LED_BLUE_SET(colorMap[color].blue);
}

int Key_scan(void)
{
    static uint8_t key_pressed = 0;  // 记录按键状态
    
    if (DL_GPIO_readPins(KEY_PORT, KEY_Pin1_PIN) == 0) {
        key_pressed = 1;  // 标记按键1按下
    } 
    else if (DL_GPIO_readPins(KEY_PORT, KEY_Pin2_PIN) == 0) {
        key_pressed = 2;  // 标记按键2按下
    }
    else {
        if (key_pressed != 0) {
            uint8_t temp = key_pressed;
            key_pressed = 0;  // 重置状态
            return temp;     // 返回松开时的键值
        }
    }
    return 0;  // 无按键动作
}


// 声光提示（仅在计数值变化时触发）
void Sg(void)
{
    static uint32_t last_count = 0xFFFFFFFF; // 初始化为不可能的值

    if (counter.count != last_count) {  // 检查计数值是否变化
        RGB_LED(LED_COLOR_RED);
        BEEP(1);
        delay_cycles(6400000);        // 保持提示时长
        RGB_LED(LED_COLOR_NONE);
        BEEP(0);    
        last_count = counter.count;    // 更新记录值
    }
}


